;Datei : listing6.asm
;Beschreibung: Eine Bitplane mit Muster.
;Autor : Enrico Bauermeister
;Datum : 16.12.1997
;Assembler : TFA AsmOne v1.30
;=======================================
;Interrupts sperren - Betriebssystem ausschalten
;-----------------------------------------------
move.w #$4000,$dff09a
;Sprites ausschalten (sonst stören die nur)
;------------------------------------------
move.w #$0020,$dff096
;Adresse der Bitplane in die Bitplanepointer eintragen
;-----------------------------------------------------
;Zuerst wird das Low-Word in $dff0e2 und anschließend das High-Word in
;$dff0e0 eingetragen.
;-----------------------------------------------------
move.l #Plane,d0 ;Plane-Aresse nach d0
move.w d0,plane1+6 ;Low-Word eintragen
swap d0 ;Words in d0 vertauschen
move.w d0,plane1+2 ;High-Word eintragen
;Copperliste aktivieren
;----------------------
move.l #Copperliste,$dff084
;Muser erzeugen
;--------------
bsr.w muster
;Warten auf Rasterstrahl (eine 1/50 Sekunde)
;-------------------------------------------
wait:
move.l $dff004,d0
and.l #$fff00,d0
cmp.l #$00003000,d0
bne.s wait
;Linke Maustaste gedrückt ?
;--------------------------
btst #6,$bfe001
bne.s wait
;Sprites wieder einschalten
;--------------------------
move.w #$8020,$dff096
;Interrupts wieder erlauben
;--------------------------
move.w #$c000,$dff09a
;Programmende
;------------
moveq #0,d0
rts
;Routine um ein Muster auf der Bitplane zu erzeugen
;--------------------------------------------------
muster:
lea Plane,a0 ;Adresse der Bitplane
moveq #8-1,d0 ;8 Paare von 16 Punkten hohen Quadraten
;(jedes Paar (ein schwarzes und ein weißes
; Quadrat) ist 32 Punkte hoch -> 8 Paare
; davon untereinander und die Bitplane ist
; voll (256 Punkte hoch))
mpaar:
move.l #(10*16)-1,d1 ;10 Paare um eine Zeile zu füllen (320 Punkte)
;16 Zeilen sind zu füllen
meins:
move.l #%11111111111111110000000000000000,(a0)+ ;Bits in der Bitplane
dbra d1,meins ;Mit "dbra" kann man Zähl- ;setzen
;schleifen in Assembler
;realisieren. Bei dieser
;Anweisung wird D1 bis auf
;-1 runtergezählt. Ist D1
;noch nicht -1, so wird zum
;Label "meins" gesprungen.
;Eine DBRA-Schleife zählt
;also immer bis -1 und nicht
;bis 0.
move.l #(10*16)-1,d1 ;10 Paare um eine Zeile zu füllen (320 Punkte)
;16 Zeilen sind zu füllen
mzwei:
move.l #%00000000000000001111111111111111,(a0)+ ;Bits in der Bitplane
dbra d1,mzwei ;setzen
dbra d0,mpaar
rts
;Copperliste
;-----------
SECTION Cl,CODE_C
Copperliste:
dc.w $008e,$2c81 ;DIWSTRT
dc.w $0090,$2cc1 ;DIWSTOP
dc.w $0092,$0038 ;DDFSTRT
dc.w $0094,$00d0 ;DDFSTOP
dc.w $0100,$1200 ;BPLCON0
dc.w $0108,$0000 ;BPL1MOD
dc.w $010a,$0000 ;BPL2MOD
plane1:
dc.w $00e0,$0000 ;BPL1PTH
dc.w $00e2,$0000 ;BPL1PTL
dc.w $0180,$0000 ;COLOR00
dc.w $0182,$0fff ;COLOR01
dc.w $ffff,$fffe ;Copperlistenende
;Bitplane
;--------
SECTION Bp,BSS_C
Plane:
ds.b 10240
END
Zurück zum Programmierkurs